package com.fengdi.everyday.middle;

/**
 * @Description 2125.银行中激光的数量
 * @Date 09:26
 */
public class NumberOfBeams {
    /*
    * TODO
    *  1. 双指针，记录上一个存在设备的行pre
    *  2. 两行之间激光的数量即为上一个存在设备的行 和 当前存在设备的行，两行设备数量的乘积
    * */

    public int numberOfBeams(String[] bank) {
        int pre = 0;
        int res = 0;

        for(int i = 0; i < bank.length; i++) { // 定位首个存在设备的行
            if(bank[i].contains("1")) {
                pre = i;
                break;
            }
        }

        for(int i = pre + 1; i < bank.length; i++) {
            if(bank[i].contains("1")) { // 当前行存在设备
                res += this.countBeams(bank[pre], bank[i]); // 计算两行之间的激光数量
                pre = i; // 前一行定位为当前行
            }
        }
        return res;
    }

    private int countBeams(String s1, String s2) {
        return this.countDevices(s1) * this.countDevices(s2);
    }

    private int countDevices(String s) {
        int count = 0;
        for(char a : s.toCharArray()) {
            if(a == '1') count++;
        }
        return count;
    }
}
